home *** CD-ROM | disk | FTP | other *** search
/ Trading on the Edge / Trading On The Edge - CD-ROM Toolkit (Wayzata Technology)(2031)(1994).bin / pc / shared / freeman / adaline.m next >
Text File  |  1993-10-27  |  4KB  |  96 lines

  1. BeginPackage["Adaline`"]
  2.  
  3. alcTest::usage = "alcTest[learnRate,numIters:250]"
  4. calcMsc::usage = "calcMse[ioPairs,wtVec]"
  5. alcXor::usage = "alcXor[learnRate,numInputs,ioPairs,numIters:250]"
  6. testXor::usage = "testXor[ioPairs,weights]"
  7. alcXorMin::usage = "alcXorMin[learnRate,numInputs,ioPairs,maxError]"
  8.  
  9. Begin["`Private`"]    (* begin the private context *)
  10.  
  11.  
  12. alcTest[learnRate_,numIters_:250] := 
  13. Module[{eta=learnRate,wts,k,inputs,wtList,outDesired,outputs,outError},
  14.   wts = Table[Random[],{2}];    (* initialize weights *)
  15.   Print["Starting weights = ",wts];
  16.   Print["Learning rate = ",eta];
  17.   Print["Number of iterations = ",numIters];
  18.   inputs = {0,Random[Real,{0, 0.175}]};(* initialize input vector *)
  19.   k=1;
  20.   wtList=Table[
  21.     inputs[[1]] = N[Sin[Pi k/8]]+Random[Real,{0, 0.175}];
  22.     outDesired = N[2 Cos[Pi k/8]]; (* desired output *)
  23.     outputs = wts.inputs;    (* actual output *)
  24.     outError = outDesired-outputs; (* error *)
  25.     wts += eta outError inputs; (* update weights *)
  26.     inputs[[2]]=inputs[[1]]; (* shift input values *)
  27.     k++;    wts,{numIters}];                            (* end of Table *)
  28.  Print["Final weight vector = ",wts];
  29.  wtPlot=ListPlot[wtList,PlotJoined->True] (* plot the weights *)        
  30.  ]        (* end of Module *)        
  31.  
  32.  
  33. calcMse[ioPairs_,wtVec_] := 
  34.     Module[{errors,inputs,outDesired,outputs},
  35.         inputs = Map[First,ioPairs]; (* extract inputs *)
  36.         outDesired = Map[Last,ioPairs];  (* extract desired outputs *)
  37.         outputs = inputs . wtVec;  (* calculate actual outputs *)
  38.         errors = Flatten[outDesired-outputs];
  39.         Return[errors.errors/Length[ioPairs]]
  40.         ]
  41.  
  42. alcXor[learnRate_,numInputs_,ioPairs_,numIters_:250] :=
  43.   Module[{wts,eta=learnRate,errorList,inputs,outDesired,ourError,outputs},
  44.     SeedRandom[6460];        (* seed random number gen.*)
  45.     wts = Table[Random[],{numInputs}];    (* initialize weights *)
  46.     errorList=Table[      (* select ioPair at random *)
  47.         {inputs,outDesired} = ioPairs[[Random[Integer,{1,4}]]];
  48.         outputs = wts.inputs;    (* actual output *)
  49.         outError = First[outDesired-outputs]; (* error *)
  50.         wts += eta outError inputs; 
  51.         outError,{numIters}];    (* end of Table *)
  52.     ListPlot[errorList,PlotJoined->True];
  53.     Return[wts];
  54.     ];  (* end of Module *)
  55.  
  56.  
  57. testXor[ioPairs_,weights_] :=
  58.     Module[{errors,inputs,outDesired,outputs,wts,mse},
  59.         inputs = Map[First,ioPairs]; (* extract inputs *)
  60.         outDesired = Map[Last,ioPairs];  (* extract desired outputs *)
  61.         outputs = inputs . weights;  (* calculate actual outputs *)
  62.         errors = outDesired-outputs;
  63.         mse=
  64.           Flatten[errors] . Flatten[errors]/Length[ioPairs];
  65.         Print["Inputs = ",inputs];
  66.         Print["Outputs = ",outputs];
  67.         Print["Errors = ",errors];
  68.         Print["Mean squared error = ",mse]
  69.         ]        
  70.  
  71.  
  72. alcXorMin[learnRate_,numInputs_,ioPairs_,maxError_] :=
  73.   Module[{wts,eta=learnRate,errorList,inputs,outDesired,
  74.               meanSqError,done,k,ourError,outputs,errorPlot},
  75.     wts = Table[Random[],{numInputs}];    (* initialize weights *)
  76.     meanSqError = 0.0;
  77.     errorList={};    
  78.     For[k=1;done=False,!done,k++,    (* until done *)
  79.                             (* select ioPair at random *)
  80.       {inputs,outDesired} = ioPairs[[Random[Integer,{1,4}]]];
  81.       outputs = wts.inputs;    (* actual output *)
  82.       outError = First[outDesired-outputs]; (* error *)
  83.       wts += eta outError inputs; (* update weights *)
  84.       If[Mod[k,4]==0,meanSqError=calcMse[ioPairs,wts];
  85.           AppendTo[errorList, meanSqError];    ];                        
  86.       If[k>4 && meanSqError<maxError,done=True,Continue];    (* test for done *)
  87.         ];                            (* end of For *)
  88.     errorPlot=ListPlot[errorList,PlotJoined->True];
  89.     Return[wts];
  90.     ] (* end of Module *)                            
  91.  
  92.  
  93.  
  94. End[]         (* end the private context *)
  95.  
  96. EndPackage[]  (* end the package context *)